#include "Server.hpp"
#include<memory>
#include<fcntl.h>

void Daemon(bool ischdir,bool isclose)
{
        //1.忽略可能引起程序异常退出的情况
        signal(SIGCHLD,SIG_IGN);
        signal(SIGPIPE,SIG_IGN);
        //2.将进程交给band接管
        if(fork()>0)
                exit(0);
        //3.子进程设置一个新的会话
        setsid();
        //4.设置根目录
        if(ischdir)
                chdir("/");
        //5.处理不需要的文件描述符
        if(isclose)
        {
                close(0);
                close(1);
                close(2);
        }
        else
        {
                //推荐使用这个写法
                int fd = open("/dev/null",O_RDWR);
                dup2(fd,0);
                dup2(fd,1);
                dup2(fd,2);
	}
};


int main(int argc, char*argv[])
{
	if(argc!=2)
	{
		std::cerr<<"Usage:"<<argv[0]<<"local port"<<std::endl;
		exit(0);
	}
	uint16_t port =stoi(argv[1]);
	//让服务器变成守护进程
	
	//Daemon(false,false);
	HttpServer hs;
	unique_ptr<Server> s = make_unique<Server>(port,
			bind(&HttpServer::HandlerHttpRequest,&hs,std::placeholders::_1));
	s->Start();
};
